【SQL基礎】DISTINCTの基本構文 重複行の除外
カラム内には重複した値が存在することがあります。
例えば、以下のテーブル(テーブル名:teachers)のaddressカラムには”東京都”という重複した値が3件存在します。
それらの重複したレコードを1件分のレコードとして扱いたい場合はDISTINCTを使用します。
本記事では引き続き、前出のteachersテーブルを例として扱います。
1.SELECT文でDISTINCTを使用する。
DISTINCTを使用する場合と使用しない場合でどのように結果が変わるのか見ていきましょう。
例1-1.teachersテーブルのaddressカラムを抽出する(DISTINCTなし)。
SELECT address FROM teachers;
例1-2.teachersテーブルのaddressカラムを抽出する(DISTINCTあり)。
SELECT DISTINCT address FROM teachers;
DISTINCTを使用することで、重複したレコードを1件分として取得できています。
2.集約関数でDISTINCTを使用する。
集約関数とDISTINCTは併せて使うことができます。
特に、レコード数を返す関数であるCOUNT関数はDISTINCTと併用されることが多いです。
参考:COUNT関数
例1-1、例1-2で扱ったaddressカラムをCOUNTしてみましょう。
例2-1.teachersテーブルのaddressカラムのレコード数を取得する(DISTINCTなし)。
SELECT COUNT(address) FROM teachers;
東京都が3件、埼玉県が1件でレコード数は4です。
例2-2.teachersテーブルのaddressカラムのレコード数を取得する(DISTINCTあり)。
SELECT COUNT(DISTINCT address) FROM teachers;
重複している「東京都」を1件分のレコードとして扱っているのでレコード数は2です。
学習のポイント
・DISTINCTを使用することで重複したレコードを1件分のレコードとして扱うことができる。
練習問題
以下からダウンロード可能です。
また、ダウンロードしたら以下のようにしてworldcup2014データベースを作成し、インポートしてください。
※worldcup2014.zip解凍してできるworldcup2014.sqlファイルをCドライブ直下に配置した場合。
worldcup2014.zip
[sql] CREATE DATABASE worldcup2014;use worldcup2014
source C:\worldcup2014.sql
[/sql]
1.参加国は何種類のグループに分けられているでしょうか。
countriesテーブル(id,name,ranking,group_nameの4つのカラムで構成されている)を使って答えを導いてください。